perm filename UNDER.FAI[SYS,HE] blob sn#098477 filedate 1974-04-25 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		INTERNAL UNDERFLOW
C00006 ENDMK
CāŠ—;
	INTERNAL UNDERFLOW
	EXTERNAL JOBTPC,JOBAPR
	TITLE UNDERFLOW
	OPDEF ERROR [5B8]

;The parameter to underflow controls the various messages:
;the 01 bit turns on floating underflow,
;the 02 bit turns on floating overflow
;the 04 bit truns on zero divide
;the 10 bit turns on fixed overflow

UNDERF:	MOVEI 2,10
	JFCL 17,.+1;	CLEAR ANY PREVIOUSLY SET FLAGS
	SKIPN 1,-1(17);   CHANGED FROM SKIPE BECAUSE SENSE OF FLAG WAS WRONG
	SETZ 2,
	MOVE 3,[XWD -4,UNDFLG]
LP:	SETZM (3)
	TRNE 1,1
	SETOM (3)	;ENABLE ERROR MESSAGE ON BIT=1
	LSH 1,-1
	AOBJN 3,LP
	SUB 17,[(2)2]
	MOVEI 1,FLTOV
	MOVEM 1,JOBAPR
	CALLI 2,16	;SET APR FLAGS
	MOVE 1,2(17)
	TLZ 1,440140	;CLEAR PREV FLAGS
	JRST 2,@1	;RETURN

FLTOV:	MOVEM 1,SAVE1
	MOVE 1,JOBTPC
	TLNN 1,100	; is it a floating underflow?
	JRST OV		;no
	MOVE 1,-1(1)	;get opcode which caused it
	TLNN 1,40000	;test for standard flt pt opcode
	TLZ 1,2000	;change for FSC
	DPB 1,[POINT 29,.+2,35]	;modify the SETZ 
	MOVE 1,SAVE1	;restore ACs
	SETZ 0,		;zero ac and/or memory
	MOVEM 1,SAVE1
	SKIPN UNDFLG
	JRST WO		;dont print message
	MOVE 1,BP1
	JSR NUMOUT
	OUTSTR MESS1
WO:	MOVE 1,JOBTPC
	TLZ 1,440140	;zero the error bits
	MOVEM 1,JOBTPC
	MOVE 1,SAVE1	
	JRST 2,@JOBTPC	;return
	
OV:	TLNN 1,40000	;was it a floating overflow?
	JRST ZDIV	;no
	SKIPN FOVFLG
	JRST WO		;dont print flt over message
	MOVE 1,BP2
	JSR NUMOUT
	ERROR 1,MESS2
	JRST WO

ZDIV:	TLNN 1,40	;zero divide?
	JRST NOTIN	;no
	SKIPN ZDFLG
	JRST WO		;dont print zero divide message
	MOVE 1,BP4
	JSR NUMOUT
	ERROR 1,MESS4
	JRST WO

NOTIN:	SKIPN OVFLG
	JRST WO		;dont print fixed pt overflow message
	MOVE 1,BP3
	JSR NUMOUT
	ERROR 1,MESS3
	JRST WO

NUMOUT:	0
	MOVEM 1,PTR
	MOVEM 2,SAVE2
	MOVEI 2,6
	MOVE 1,JOBTPC
	HRLZI 1,-1(1)
L1:	ROT 1,3
	IORI 1,60
	IDPB 1,PTR
	HLRI 1,
	SOJG 2,L1
	MOVE 2,SAVE2
	JRST @NUMOUT

PTR:	0
UNDFLG:	0
FOVFLG:	0
ZDFLG:	0
OVFLG:	0
SAVE1:	0
SAVE2:	0
BP1:	POINT 7,MESS1+6,20
BP2:	POINT 7,MESS2+6,13
BP3:	POINT 7,MESS3+4,20
BP4:	POINT 7,MESS4+5,13
MESS1:	ASCIZ /FLOATING UNDERFLOW OCCURED, PC = 000000
/
MESS2:	ASCIZ/FLOATING OVERFLOW OCCURED, PC = 000000/
MESS3:	ASCIZ/OVERFLOW OCCURED, PC = 000000/
MESS4:	ASCIZ /ZERO DIVIDE OCCURED, PC = 000000/
END